package dslProgramGen.loopStatementsGenerators;

import java.util.List;
import java.util.Map;

/**
 * 表示能产生Loop语句的接口
 */
public interface LoopStatementsGenerator {
    /**
     * 尝试对dslMethodContentList一个连续的MOP代码片段SnippetWhole（片段的开始和结束行由currentProcessedStartAndEndIndexs确定）生成Loop语句，
     * 如果代码片段SnippetWhole中有能生成Loop语句的代码片段SnippetExtract，将SnippetExtract的开始和结束下标加入到processedStartAndEndIndexsPairList，生成的Loop语句列表加入到startAndEndIndexs2LoopStatementListMap
     *
     * @param dslMethodContentList                   待处理的DSL函数体
     * @param currentProcessedStartAndEndIndexs      当前想要处理的DSL函数体连续的MOP代码片段SnippetWhole的开始和结束行 index
     * @param processedStartAndEndIndexsPairList     之前已经生成过Loop语句的DSL函数体的开始行和结束行pair对 列表
     * @param startAndEndIndexs2LoopStatementListMap 之前已经生成过Loop语句的DSL函数体开始行和结束行pair对 To 对应的DSL语句列表; key表示开始行和结束行组成的String，value表示对应的Loop语句
     */
    void tryToGenLoopStatementInASnippet(List<String> dslMethodContentList,
                                         List<Integer> currentProcessedStartAndEndIndexs,
                                         List<List<Integer>> processedStartAndEndIndexsPairList,
                                         Map<String, List<String>> startAndEndIndexs2LoopStatementListMap);
}
